package api

import (
	"gitee.com/DengAnbang/Computation/src/dbops"
	"gitee.com/DengAnbang/Computation/src/bean"
)

/**
	* showdoc
	* @catalog socket文档/树相关
	* @title 创建树
	* @description 创建树的接口
	* @method socket type=201
	* @url /pc/tree/create
	* @param treeName 必选 string 树的名称
	* @param typeTree 必选 string 树的类型,1为模板树,2为模型树
	* @param sort 必选 string 和服务器一致的字段
	* @param code 必选 string 和服务器一致的字段
	* @param createdId 必选(socket请求可不填) string 创建人的ID
	* @return {"code":0,"type":201,"message":"","debug_message":"","data":{"node_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","tree_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","node_name":"testTreeName","node_parent_id":""}}
	* @return_param type int 请求类型
	* @return_param tree_id string 树的ID
	* @return_param node_id string 节点的ID
	* @return_param node_name string 节点的名字
	* @return_param node_parent_id string 节点的父节点ID
	* @return_param sort string 和服务器一致的字段
	* @return_param code string 和服务器一致的字段
	* @remark 最后修改时间:2018.12.07 10.30
	* @number 1
	*/
func CreateTreeSocket(parameters map[string]string, createdIdSocket string) error {
	treeName := parameters["treeName"]
	createdId := parameters["createdId"]
	sort := parameters["sort"]
	thisCode := parameters["code"]
	typeTree := parameters["typeTree"]
	if len(createdId) == 0 {
		createdId = createdIdSocket
	}
	tree, err := dbops.CreateTree(treeName, typeTree, createdId, sort, thisCode, "")
	if err != nil {
		return err
	}
	return bean.NewSucceedMessage(tree)
}

/**
	* showdoc
	* @catalog socket文档/树相关
	* @title 添加节点
	* @description 添加节点的接口
	* @method socket type=202
	* @url /pc/tree/addNode
	* @param treeName 必选 string 节点的名称
	* @param nodeParentId 必选 string 父节点的ID
	* @param sort 必选 string 和服务器一致的字段
	* @param code 必选 string 和服务器一致的字段
	* @param createdId 选填 string 用户的ID(socket的时候可以不填)
	* @return {"code":0,"type":202,"message":"","debug_message":"","data":{"node_id":"A371F613-0634-4F9D-AB2A-11DE244D","tree_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","node_name":"testNodeName","node_parent_id":"5D19ED6E-A064-4CE2-8A04-AC99B093"}}
	* @return_param type int 请求类型
	* @return_param tree_id string 树的ID
	* @return_param node_id string 节点的ID
	* @return_param node_name string 节点的名字
	* @return_param node_parent_id string 节点的父节点ID
	* @return_param sort string 和服务器一致的字段
	* @return_param code string 和服务器一致的字段
	* @remark 最后修改时间:2018.12.07 10.30
	* @number 2
	*/
func AddTreeNodeSocket(parameters map[string]string, createdIdSocket string) error {
	createdId := parameters["createdId"]
	sort := parameters["sort"]
	thisCode := parameters["code"]
	no := parameters["no"]
	if len(createdId) == 0 {
		createdId = createdIdSocket
	}
	treeName, nodeParentId := parameters["treeName"], parameters["nodeParentId"]
	tree, err := dbops.AddTreeNode(treeName, nodeParentId, createdId, sort, thisCode, no)
	if err != nil {
		return err
	}
	return bean.NewSucceedMessage(tree)
}

/**
	* showdoc
	* @catalog socket文档/树相关
	* @title 删除节点或者树
	* @description 删除节点或者树的接口
	* @method socket type=203
	* @url /pc/tree/deleteTreeNode
	* @param nodeId 必选 string 节点的ID
	* @return {"code":0,"type":203,"message":"","debug_message":"","data":"删除成功"}
	* @return_param type int 请求类型
	* @remark 最后修改时间:2018.12.07 10.30
	* @number 99
	*/
func DeleteTreeNodeSocket(parameters map[string]string) error {
	nodeId := parameters["nodeId"]
	err := dbops.DeleteTreeNode(nodeId)
	if err != nil {
		return err
	}
	return bean.NewSucceedMessage("删除成功")
}

/**
	* showdoc
	* @catalog socket文档/树相关
	* @title 查询树结构
	* @description 查询树结构的接口
	* @method socket type=204
	* @url /pc/tree/selectTreeNodeList
	* @param nodeId 必选 string 树的ID
	* @return {"code":0,"type":204,"message":"","debug_message":"","data":[{"node_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","tree_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","node_name":"testTreeName","node_parent_id":""},{"node_id":"A371F613-0634-4F9D-AB2A-11DE244D","tree_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","node_name":"testNodeName","node_parent_id":"5D19ED6E-A064-4CE2-8A04-AC99B093"},{"node_id":"0253C3F1-7214-407B-96BA-ABCE0CF8","tree_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","node_name":"第二级","node_parent_id":"A371F613-0634-4F9D-AB2A-11DE244D"},{"node_id":"90189153-2FA2-47EC-A0C0-F8669A81","tree_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","node_name":"第二级同级","node_parent_id":"A371F613-0634-4F9D-AB2A-11DE244D"}]}
	* @return_param type int 请求类型
	* @return_param tree_id string 树的ID
	* @return_param node_id string 节点的ID
	* @return_param node_name string 节点的名字
	* @return_param node_parent_id string 节点的父节点ID
	* @return_param sort string 和服务器一致的字段
	* @return_param code string 和服务器一致的字段
	* @remark 最后修改时间:2018.12.07 10.30
	* @number 6
	*/
func SelectTreeNodeListSocket(parameters map[string]string) error {
	nodeId := parameters["nodeId"]
	beans, err := dbops.SelectTreeNodeList(nodeId, true)
	if err != nil {
		return err
	}
	return bean.NewSucceedMessage(beans)
}

/**
	* showdoc
	* @catalog socket文档/树相关
	* @title 修改节点或者树的名称
	* @description 修改节点或者树的名称接口
	* @method socket type=205
	* @url /pc/tree/renameTreeNode
	* @param nodeId 必选 string 节点的ID
	* @param newName 必选 string 修改后的名字
	* @return {"code":0,"type":205,"message":"","debug_message":"","data":{"node_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","tree_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","node_name":"新名字","node_parent_id":""}}
	* @return_param type int 请求类型
	* @return_param tree_id string 树的ID
	* @return_param node_id string 节点的ID
	* @return_param node_name string 节点的名字
	* @return_param node_parent_id string 节点的父节点ID
	* @return_param sort string 和服务器一致的字段
	* @return_param code string 和服务器一致的字段
	* @remark 最后修改时间:2018.12.07 10.30
	* @number 3
	*/
func RenameTreeNodeSocket(parameters map[string]string) error {
	nodeId := parameters["nodeId"]
	newName := parameters["newName"]
	beans, err := dbops.RenameTreeNode(nodeId, newName)
	if err != nil {
		return err
	}
	return bean.NewSucceedMessage(beans)
}

/**
	* showdoc
	* @catalog socket文档/树相关
	* @title 获取自己的树结构
	* @description 获取自己的树结构的接口
	* @method socket type=206
	* @url /pc/tree/getMyTreeNode
	* @param typeTree  必选 string 树的类型,具体值请看<<创建模板树>>接口的typeTree字段说明
	* @param userId 必选(socket请求可不填) string 用户的ID
	* @return {"code":0,"type":206,"message":"","debug_message":"","data":[{"node_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","tree_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","node_name":"testTreeName","node_parent_id":""},{"node_id":"A371F613-0634-4F9D-AB2A-11DE244D","tree_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","node_name":"testNodeName","node_parent_id":"5D19ED6E-A064-4CE2-8A04-AC99B093"},{"node_id":"0253C3F1-7214-407B-96BA-ABCE0CF8","tree_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","node_name":"第二级","node_parent_id":"A371F613-0634-4F9D-AB2A-11DE244D"},{"node_id":"90189153-2FA2-47EC-A0C0-F8669A81","tree_id":"5D19ED6E-A064-4CE2-8A04-AC99B093","node_name":"第二级同级","node_parent_id":"A371F613-0634-4F9D-AB2A-11DE244D"}]}
	* @return_param type int 请求类型
	* @return_param tree_id string 树的ID
	* @return_param node_id string 节点的ID
	* @return_param node_name string 节点的名字
	* @return_param node_parent_id string 节点的父节点ID
	* @return_param sort string 和服务器一致的字段
	* @return_param code string 和服务器一致的字段
	* @remark 如果自己有多个树,则返回自己的第一个树,最后修改时间:2018.12.10 10.30
	* @number 5
	*/
func GetMyTreeNodeSocket(parameters map[string]string, userId string) error {
	typeTree := parameters["typeTree"]
	var tree bean.TreeBean
	trees, err := dbops.GetUserTreeList(userId, typeTree)
	if err != nil {
		return err
	}
	for _, v := range trees {
		if v.CreatedId == userId {
			tree = v.TreeBean
			break
		}
	}
	if len(tree.NodeId) <= 0 {
		return bean.NewSucceedMessage(nil)
	}
	beans, err := dbops.SelectTreeNodeList(tree.TreeId, true)
	if err != nil {
		return err
	}
	return bean.NewSucceedMessage(beans)
}

/**
	* showdoc
	* @catalog socket文档/树相关
	* @title 获取用户所有树的列表
	* @description 获取用户所有树的列表接口
	* @method socket type=207
	* @url /pc/tree/getUserTreeList
	* @param typeTree  必选 string 树的类型,具体值请看<<创建模板树>>接口的typeTree字段说明
	* @param userId  必选(http) string 用户的ID
	* @return {"code":0,"type":207,"message":"","debug_message":"","data":[{"node_id":"349E8A1E-B89F-4BDA-93DA-B0C3D57F","tree_id":"349E8A1E-B89F-4BDA-93DA-B0C3D57F","node_name":"testTreeName","node_parent_id":"","created_id":"testCreatedId"}]}
	* @return_param type int 请求类型
	* @return_param tree_id string 树的ID
	* @return_param node_id string 节点的ID
	* @return_param node_name string 节点的名字
	* @return_param node_parent_id string 节点的父节点ID
	* @return_param sort string 和服务器一致的字段
	* @return_param code string 和服务器一致的字段
	* @remark 最后修改时间:2018.12.07 10.30
	* @number 4
	*/
func GetUserTreeListSocket(parameters map[string]string, userId string) error {
	typeTree := parameters["typeTree"]
	beans, err := dbops.GetUserTreeList(userId, typeTree)
	if err != nil {
		return err
	}
	return bean.NewSucceedMessage(beans)
}
